home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 8: LINUX Games / Linux Cubed Series 8 - LINUX Games.iso / games / x11 / strategy / xpat2-1.000 / xpat2-1 / xpat2-1.04 / src / r_Seahaven.c < prev    next >
C/C++ Source or Header  |  1994-09-28  |  3KB  |  112 lines

  1. /*****************************************************************************/
  2. /*                                         */
  3. /*                                         */
  4. /*    X patience version 2 -- module r_Seahaven.c                 */
  5. /*                                         */
  6. /*    Characteristics of the ``Seahaven Towers'' rules             */
  7. /*    written by Michael Bischoff                         */
  8. /*    see COPYRIGHT.xpat2 for Copyright details                 */
  9. /*                                         */
  10. /*                                         */
  11. /*****************************************************************************/
  12. #include "xpatgame.h"
  13.  
  14. static int Seahaven_valid(Cardindex src, Pileindex dstpile) {
  15.     Pileindex srcpile;
  16.     if (!default_movevalid(src, dstpile))
  17.     return 0;    /* move is not valid */
  18.     /* if we use relaxed rules, the move is valid */
  19.     if (rules.param[0])
  20.     return 1;    /* relaxed rules */
  21.     /* strict rules: for slot to slot moves, there must be a sufficient
  22.        number of tmps free */
  23.     srcpile = getpile(src);
  24.     if (game.piletype[srcpile] == Slot && game.piletype[dstpile] == Slot) {
  25.     int freetmps, cardsmoved;
  26.     cardsmoved = INDEX_OF_LAST_CARD(srcpile) + 1 - src;
  27.     freetmps = rules.numtmps - (INDEX_OF_FIRST_CARD(
  28.             LAST_SLOT+1+rules.numtmps) - INDEX_OF_FIRST_CARD(LAST_SLOT+1));
  29.     if (cardsmoved-1 > freetmps)
  30.         return 0;
  31.     }
  32.     return 1;
  33. }
  34.  
  35. struct rules Seahaven_rules = {    /* Seahaven */
  36.     "Seahaven",    /* shortname */
  37.     "Seahaven Towers",    /* longname */
  38.     "st",       /* abbrev */
  39.     1,        /* layout_hints */
  40.     NODEAL,    /* variant */
  41.     CUSTOM_STD|CUSTOM_PARAM0,    /* customizable */
  42.     0,        /* customized */
  43.     52,        /* numcards */
  44.     4,        /* numstacks */
  45.     10,        /* numslots */
  46.     4,        /* numtmps */
  47.     1,        /* numdecks */
  48.     13,        /* cards_per_color */
  49.     0,        /* numjokers */
  50.     {0, 0, 0, 0},/* param[0], param[1], param[2], param[3] */
  51.     0,        /* facedown */
  52.     5,        /* faceup */
  53.     0,        /* newgame_bits */
  54.     NULL,    /* new_game */
  55.     NULL,    /* game_won */
  56.     NULL,    /* new_cards */
  57.     ES_KINGS|US_RS|MG_RS|DC_ALWAYS|ST_ONE|STACK_SOURCE, /* move_bits */
  58.     NULL,    /* deal_cards */
  59.     NULL,    /* undeal_cards */
  60.     NULL,    /* stackable */
  61.     Seahaven_valid,    /* movevalid */
  62.     NULL,    /* valid */
  63.     NULL,    /* relaxed_valid */
  64.     std_good_hint,/* good_hint */
  65.     NULL,    /* automove */
  66.     NULL,    /* score */
  67.     0,        /* maxscore */
  68.     {0, 0, 0, 0}, /* paramstring blocks */
  69.     0,        /* used */
  70.     NULL,    /* initfunc */
  71.     NULL,    /* local keyboard bindings */
  72. };
  73.  
  74. struct rules FreeCell_rules = {    /* FreeCell */
  75.     "Free Cell",/* shortname */
  76.     NULL,    /* longname */
  77.     "fc",       /* abbrev */
  78.     1,        /* layout_hints */
  79.     NODEAL,    /* variant */
  80.     CUSTOM_STD|CUSTOM_PARAM0,    /* customizable */
  81.     0,        /* customized */
  82.     52,        /* numcards */
  83.     4,        /* numstacks */
  84.     8,        /* numslots */
  85.     4,        /* numtmps */
  86.     1,        /* numdecks */
  87.     13,        /* cards_per_color */
  88.     0,        /* numjokers */
  89.     {0, 0, 0, 0},/* param[0], param[1], param[2], param[3] */
  90.     0,        /* facedown */
  91.     6,        /* faceup */
  92.     FORCE_SLOTS,/* newgame_bits */
  93.     NULL,    /* new_game */
  94.     NULL,    /* game_won */
  95.     NULL,    /* new_cards */
  96.     ES_ALL|US_RA|MG_RA|DC_ALWAYS|ST_ONE|STACK_SOURCE, /* move_bits */
  97.     NULL,    /* deal_cards */
  98.     NULL,    /* undeal_cards */
  99.     NULL,    /* stackable */
  100.     Seahaven_valid,    /* movevalid */
  101.     NULL,    /* valid */
  102.     NULL,    /* relaxed_valid */
  103.     std_good_hint,/* good_hint */
  104.     NULL,    /* automove */
  105.     NULL,    /* score */
  106.     0,        /* maxscore */
  107.     {0, 0, 0, 0}, /* paramstring blocks */
  108.     0,        /* used */
  109.     NULL,    /* initfunc */
  110.     NULL,    /* local keyboard bindings */
  111. };
  112.